#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""
语言管理器模块
负责管理应用程序的多语言支持
"""

import os
import json
import logging
from typing import Dict, Any, List

# 配置日志
logger = logging.getLogger(__name__)

class LanguageManager:
    """语言管理器类"""
    
    def __init__(self, default_language: str = 'zh'):
        """
        初始化语言管理器
        
        Args:
            default_language (str): 默认语言代码
        """
        self.current_language = default_language
        
        # 语言包目录路径
        self.languages_path = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), 'languages')
        
        # 确保语言包目录存在
        os.makedirs(self.languages_path, exist_ok=True)
        
        # 支持的语言列表
        self.supported_languages = {
            'zh': '中文',
            'en': 'English',
            'ja': '日本語',
            'ko': '한국어'
        }
        
        # 加载语言包
        self.translations = self.load_translations()
        
        logger.info(f"语言管理器初始化完成，当前语言：{self.current_language}")
    
    def load_translations(self) -> Dict[str, Dict[str, str]]:
        """
        加载所有语言包
        
        Returns:
            dict: 语言包字典，格式为 {语言代码: {翻译键: 翻译值}}
        """
        translations = {}
        
        try:
            # 遍历语言包目录
            for lang_code in self.supported_languages.keys():
                lang_file = os.path.join(self.languages_path, f'{lang_code}.json')
                
                # 如果语言文件不存在，创建默认语言包
                if not os.path.exists(lang_file):
                    self.create_default_language_pack(lang_code)
                
                # 加载语言包
                with open(lang_file, 'r', encoding='utf-8') as f:
                    translations[lang_code] = json.load(f)
                
                logger.info(f"加载语言包成功：{lang_file}")
        
        except Exception as e:
            logger.error(f"加载语言包失败: {str(e)}")
        
        return translations
    
    def create_default_language_pack(self, lang_code: str):
        """
        创建默认语言包
        
        Args:
            lang_code (str): 语言代码
        """
        try:
            # 默认翻译
            default_translations = {
                'zh': {
                    # 通用
                    'app_name': '文档智能摘要工具',
                    'loading': '加载中...',
                    'success': '成功',
                    'error': '错误',
                    'warning': '警告',
                    'info': '提示',
                    'confirm': '确认',
                    'cancel': '取消',
                    'save': '保存',
                    'delete': '删除',
                    'edit': '编辑',
                    'close': '关闭',
                    
                    # 导航
                    'nav_home': '首页',
                    'nav_history': '历史记录',
                    'nav_settings': '设置',
                    
                    # 首页
                    'input_title': '输入文本',
                    'tab_text': '文本输入',
                    'tab_file': '文件上传',
                    'tab_summary': '摘要',
                    'tab_keywords': '关键词',
                    'tab_original': '原文',
                    'summary_ratio': '摘要比例',
                    'clear_text': '清空',
                    'generate_summary': '生成摘要',
                    'copy_summary': '复制摘要',
                    'save_to_history': '保存到历史记录',
                    'supported_formats': '支持的格式',
                    'browse_files': '浏览文件',
                    
                    # 历史记录
                    'history_title': '历史记录',
                    'history_empty': '暂无历史记录',
                    'export_history': '导出',
                    'import_history': '导入',
                    'clear_history': '清空',
                    'history_detail_title': '历史记录详情',
                    'total_records': '条记录',
                    'delete_history': '删除',
                    'merge_records': '合并记录（不覆盖现有记录）',
                    
                    # 设置
                    'settings_title': '设置',
                    'settings_general': '常规设置',
                    'settings_language': '语言',
                    'settings_theme': '主题',
                    'settings_theme_light': '亮色',
                    'settings_theme_dark': '暗色',
                    'settings_theme_system': '跟随系统',
                    'settings_summary': '摘要设置',
                    'settings_algorithm': '算法',
                    'settings_algorithm_extractive': '抽取式',
                    'settings_algorithm_abstractive': '生成式',
                    'settings_default_ratio': '默认比例',
                    'settings_keywords_count': '关键词数量',
                    'settings_document': '文档设置',
                    'settings_max_size': '最大文件大小',
                    'settings_supported_formats': '支持的文件格式',
                    'settings_history': '历史记录设置',
                    'settings_auto_save': '自动保存',
                    'settings_max_history': '最大历史记录数',
                    'settings_web': 'Web设置',
                    'settings_port': '端口',
                    'settings_host': '主机',
                    'save_settings': '保存设置',
                    'reset_settings': '重置设置',
                    
                    # 提示信息
                    'text_required': '请输入文本内容',
                    'file_required': '请选择文件',
                    'file_too_large': '文件大小超过限制',
                    'unsupported_format': '不支持的文件格式',
                    'summary_success': '摘要生成成功',
                    'summary_error': '摘要生成失败',
                    'copy_success': '复制成功',
                    'save_success': '保存成功',
                    'save_error': '保存失败',
                    'delete_confirm': '确定要删除吗？',
                    'clear_confirm': '确定要清空吗？',
                    'import_success': '导入成功',
                    'import_error': '导入失败',
                    'export_success': '导出成功',
                    'export_error': '导出失败',
                    'settings_saved': '设置已保存',
                    'settings_reset': '设置已重置'
                },
                'en': {
                    # Common
                    'app_name': 'Document Smart Summary Tool',
                    'loading': 'Loading...',
                    'success': 'Success',
                    'error': 'Error',
                    'warning': 'Warning',
                    'info': 'Info',
                    'confirm': 'Confirm',
                    'cancel': 'Cancel',
                    'save': 'Save',
                    'delete': 'Delete',
                    'edit': 'Edit',
                    'close': 'Close',
                    
                    # Navigation
                    'nav_home': 'Home',
                    'nav_history': 'History',
                    'nav_settings': 'Settings',
                    
                    # Home
                    'input_title': 'Input Text',
                    'tab_text': 'Text Input',
                    'tab_file': 'File Upload',
                    'tab_summary': 'Summary',
                    'tab_keywords': 'Keywords',
                    'tab_original': 'Original',
                    'summary_ratio': 'Summary Ratio',
                    'clear_text': 'Clear',
                    'generate_summary': 'Generate Summary',
                    'copy_summary': 'Copy Summary',
                    'save_to_history': 'Save to History',
                    'supported_formats': 'Supported Formats',
                    'browse_files': 'Browse Files',
                    
                    # History
                    'history_title': 'History',
                    'history_empty': 'No history records',
                    'export_history': 'Export',
                    'import_history': 'Import',
                    'clear_history': 'Clear',
                    'history_detail_title': 'History Detail',
                    'total_records': 'records',
                    'delete_history': 'Delete',
                    'merge_records': 'Merge Records (Don\'t overwrite existing)',
                    
                    # Settings
                    'settings_title': 'Settings',
                    'settings_general': 'General Settings',
                    'settings_language': 'Language',
                    'settings_theme': 'Theme',
                    'settings_theme_light': 'Light',
                    'settings_theme_dark': 'Dark',
                    'settings_theme_system': 'System',
                    'settings_summary': 'Summary Settings',
                    'settings_algorithm': 'Algorithm',
                    'settings_algorithm_extractive': 'Extractive',
                    'settings_algorithm_abstractive': 'Abstractive',
                    'settings_default_ratio': 'Default Ratio',
                    'settings_keywords_count': 'Keywords Count',
                    'settings_document': 'Document Settings',
                    'settings_max_size': 'Max File Size',
                    'settings_supported_formats': 'Supported Formats',
                    'settings_history': 'History Settings',
                    'settings_auto_save': 'Auto Save',
                    'settings_max_history': 'Max History Records',
                    'settings_web': 'Web Settings',
                    'settings_port': 'Port',
                    'settings_host': 'Host',
                    'save_settings': 'Save Settings',
                    'reset_settings': 'Reset Settings',
                    
                    # Messages
                    'text_required': 'Please input text',
                    'file_required': 'Please select a file',
                    'file_too_large': 'File size exceeds limit',
                    'unsupported_format': 'Unsupported file format',
                    'summary_success': 'Summary generated successfully',
                    'summary_error': 'Failed to generate summary',
                    'copy_success': 'Copied successfully',
                    'save_success': 'Saved successfully',
                    'save_error': 'Failed to save',
                    'delete_confirm': 'Are you sure to delete?',
                    'clear_confirm': 'Are you sure to clear?',
                    'import_success': 'Imported successfully',
                    'import_error': 'Failed to import',
                    'export_success': 'Exported successfully',
                    'export_error': 'Failed to export',
                    'settings_saved': 'Settings saved',
                    'settings_reset': 'Settings reset'
                }
            }
            
            # 获取默认翻译
            translations = default_translations.get(lang_code, default_translations['en'])
            
            # 保存语言包
            lang_file = os.path.join(self.languages_path, f'{lang_code}.json')
            with open(lang_file, 'w', encoding='utf-8') as f:
                json.dump(translations, f, ensure_ascii=False, indent=4)
            
            logger.info(f"创建默认语言包成功：{lang_file}")
        
        except Exception as e:
            logger.error(f"创建默认语言包失败: {str(e)}")
    
    def get_translation(self, key: str) -> str:
        """
        获取翻译
        
        Args:
            key (str): 翻译键
            
        Returns:
            str: 翻译值，如果不存在则返回键名
        """
        try:
            # 获取当前语言的翻译
            translations = self.translations.get(self.current_language, {})
            
            # 如果翻译不存在，尝试使用英文翻译
            if key not in translations:
                translations = self.translations.get('en', {})
            
            return translations.get(key, key)
        
        except Exception as e:
            logger.error(f"获取翻译失败: {str(e)}")
            return key
    
    def set_language(self, language: str):
        """
        设置当前语言
        
        Args:
            language (str): 语言代码
        """
        if language in self.supported_languages:
            self.current_language = language
            logger.info(f"设置当前语言：{language}")
        else:
            logger.warning(f"不支持的语言：{language}")
    
    def get_current_language(self) -> str:
        """
        获取当前语言
        
        Returns:
            str: 当前语言代码
        """
        return self.current_language
    
    def get_supported_languages(self) -> Dict[str, str]:
        """
        获取支持的语言列表
        
        Returns:
            dict: 支持的语言字典，格式为 {语言代码: 语言名称}
        """
        return self.supported_languages